<?php
//命名空间
namespace App\Http\Controllers;

//引入类
use Illuminate\Http\Request;
use DB;
use App\Member;
use Cache;
use Arr;
use Str;

use PhpParser\Node\Expr\FuncCall;

// 继承基类
class TestController extends Controller
{
    //代码空间
    public function input(Request $request)
    {
        // $name=$request->input('name');
        $name = $request->name;
        return 'name的值为' . $name;
    }
    //代码演示session使用
    public function testSession()
    {
        session(['name' => '李四', 'age' => '12']);
        // 查看特定数据
        dump(session('name'));
        // 查看所有
        dump(session()->all());
        // 读取不存在 返回0
        dump(session('age', 0));
        // 删除
        // dump(session()->forget('name'));

        // 删除全部
        session()->flush();
        // 判断是否存在
        dump(session()->has('name'));
    }
    public function database()
    {
        $data = DB::table('member')->get();
        foreach ($data as $v) {
            dump($v->id . '-' . $v->name . '-' . $v->age);
        }
    }
    public function modifyaction()
    {
        // 添加一条数据
        // $data = [
        //     'name' => 'admin',
        //     'age' => '23',
        //     'email' => 'admin@laravel.test'
        //     ];
        //  添加多条信息
        // $data = [
        //     ['name' => 'admin6','age' => '24','email' => '6@laravel.test'],
        //     ['name' => 'admin7','age' => '25','email' => 'admin7@laravel.test'],
        //     ['name' => 'admin8','age' => '26','email' => 'admin8@laravel.test'],
        //     ];
        // insert()方法
        // dump(DB::table('member')->insert($data));
        // insertGetId()方法
        // dump(DB::table('member')->insertGetId($data));

        // 修改数据
        // 将表中所有记录的name字段的值都改为tom
        // $data = ['name' => 'tom'];
        // dump(DB::table('member')->update($data));
        // 将表中所有记录的age字段的值都加1
        // dump(DB::table('member')->increment('age'));
        // 将表中所有记录的age字段的值都减1
        // dump(DB::table('member')->decrement('age'));
        // 加五
        // dump(DB::table('member')->increment('age',5));
        // 减5
        // dump(DB::table('member')->decrement('age',5));
        // 条件限定修改
        // $data = [
        //     // 添加单条数据
        //     'name' => 'adler',
        //     'age' => '66',
        //     'email' => 'adler@laravel.test'
        // ];
        // 参数形式1：where(字段名, 运算符, 字段值)
        // DB::table('member')->where('id', '=', '1')->update($data);
        // where()表示AND，即 “WHERE id=1 AND name='tom'”
        // DB::table('member')->where(['id' => 6])->where(['name' => 'tom'])->update($data);
        // DB::table('member')->where(['id' => 4])->orwhere(['name' => 'tom'])->update($data);

        // 执行SELECT语句，返回结果集
        // $data = DB::select('SELECT * FROM `member`');
        // dump($data);
        // 执行INSERT语句，返回true或false
        // DB::insert('INSERT INTO `member` SET `name`=\'tom\'');
        // 执行UPDATE语句，返回受影响的行数
        // DB::update('UPDATE `member` SET `age`=\'20\' WHERE `name`=\'tom\'');
        // 执行DELETE语句，返回受影响的行数
        // DB::delete('DELETE FROM `member` WHERE `name`=\'tom\'');
        // 执行其他语句，如CREATE TABLE，返回true或false
        // DB::statement('CREATE TABLE `test` (`id` INT)');
        // 删除id为1的记录，返回值为删除的行数
        // $res = DB::table('member')->where('id', '1')->delete();
        // dump($res);
        // 清空数据表（相当于SQL中的“TRUNCATE member”）
        // DB::table('member')->truncate();

        // 在控制器中多表查询
        $data = DB::table('article AS t1')->select(
            't1.id',
            't1.article_name AS article_name',
            't2.author_name AS author_name'
        )->leftjoin(
            'author AS t2',
            't1.author_id',
            '=',
            't2.id'
        )->get();
        foreach ($data as $v) {
            echo $v->id . '-' . $v->article_name . '-' . $v->author_name;
        }
    }
    public function members()
    {
        // 方式1：静态调用
        // Member::get();
        // 方式2：实例化模型
        // $member = new Member();
        // $member->get();

        // //save
        // $member = new Member();
        // $member->name = 'save';
        // $member->age = '20';
        // $member->email = 'save@laravel.test';
        // dump($member->save());        // 保存数据
        // dump($member->id);

        // $data = ['name' => 'fill', 'age' => '20', 'email' => 'fill@laravel.test'];
        // $member = new Member();
        // $member->fill($data);
        // $member->save();


        // $data=['name'=>'tom','age'=>'20'];
        // $member=Member::create($data);
        // $member->save();

        // 模型查询
        // 查询主键为4的记录，返回模型对象
        // $member = Member::find(4);
        // dump($member->name);
        // 添加查询条件，返回name和age字段
        // $member = Member::where('name', 'tom')->select('name', 'age')->find(1);
        // dump($member);
        // 查询主键为1、2、3的记录，返回对象集合
        // $members = Member::find([1, 2, 3]);
        // dump($members);
        // 模型的get()方法
        // $members = Member::where('id', '1')->get();
        // dump(get_class($members[0]));    // 输出结果："App\Member"
        // DB类的get()方法
        // $members = DB::table('member')->where('id', 1)->get();
        // dump(get_class($members[0]));
        // 查询所有记录，返回对象集合
        // $members = Member::all();
        // dump($members);
        // 查询所有记录的name和age字段，返回对象集合
        // $members = Member::all(['name', 'age']);
        // dump($members);

        // 修改数据
        // $member=Member::find(4);
        // if($member){
        //     $member->name='tset';
        //     $member->email='test@laravel.net';
        //     $member->save();
        //     dump('修改成功');
        // }else{
        //     dump('修改失败');
        // }
        // Member::where('id','5')->update(['name'=>'test1','age'=>30]);
        // 删除数据
        // $member = Member::faind(4);
        // if ($member) {
        //     $member->delete();
        //     dump('删除成功');
        // } else {
        //     dump('删除失败');
        // }
        // Member::where('id','6')->delete();


        // 关联模型的使用
        // $data = \App\Article::all();
        // foreach ($data as $Key => $value) {
        //     echo '文章id：' . $value->id . '<br>';
        //     echo '文章名称：' . $value->article_name . '<br>';
        //     echo '作者名称：' . $value->author->author_name . '<br>';
        // }
        // 一对多
        // $data = \App\Author::all();
        // foreach ($data as $key => $value) {
        //     echo '作者名称' . $value->author_name . '<br>';
        //     foreach ($value->article as $k => $v) {
        //         echo $v->article_name . '<br>';
        //     }
        // }
        // 多对一
        // $data = \App\Article::all();
        // foreach ($data as $Key => $value) {
        //     echo '文章id：' . $value->id . '<br>';
        //     echo '文章名称：' . $value->article_name . '<br>';
        //     echo '作者名称：' . $value->author->author_name . '<br>';
        // }
        // 多对多
        // $data = \App\Article::all();
        // foreach ($data as $key => $value) {
        //     echo '文章名称：' . $value->article_name . '<br>';
        //     echo '关键词：';
        //     foreach ($value->keyword as $k => $v) {
        //         echo $v->keyword . ' ';
        //     }
        //     echo '<hr>';
        // }
        $data = \App\Keyword::all();
        foreach ($data as $key => $value) {
            echo '关键词：' . $value->keyword . '<br>';
            echo '相关文章：';
            foreach ($value->article as $k => $v) {
                echo $v->article_name . ' ';
            }
            echo '<hr>';
        }
    }
    public function lookData()
    {
        // $data = [
        //     'name' => 'adler3',
        //     'age' => '67',
        //     'email' => 'adler1@laravel.test'
        // ];
        // // 参数形式1：where(字段名, 运算符, 字段值)
        // // DB::table('member')->where('id', '=', '1')->update($data);
        // // // 参数形式3：where([字段名 => 字段值])，使用“=”运算符，支持多个字段，AND关系
        // // DB::table('member')->where(['id' => 1])->update($data);
        // // where()表示AND，即 “WHERE id=1 AND name='tom'”
        // // DB::table('member')->where(['id' => 2])->where(['name' => 'mack'])->update($data);
        // // orWhere()表示OR，即“WHERE id=1 OR name='tom'”
        // DB::table('member')->where(['id' => 1])->orWhere(['name' => 'adler1'])->update($data);
        // 查询全部
        // $data = DB::table('member')->get();
        // 指定查询条件
        // $data=DB::table('member')->where('id', '<=', 4)->get();
        // foreach ($data as $v) {
        //     echo $v->id . '-' . $v->name .'-'.$v->age .'<br>';
        // }
        // 单行查询
        // 查询id为1的记录
        // $data = DB::table('member')->where('id', '6')->first();
        // // 输出id字段的值
        // dump($data->name);
        // 获取name和email两个字段，返回多条记录
        // $data = DB::table('member')->get(['name', 'email']);
        //一条数据
        // $data = DB::table('member')->first(['name', 'email']);
        // 获取name字段，并设置别名为username
        // $data = DB::table('member')->select('name as username')->get();
        // 不解析字段，直接传入字符串作为字段列表
        // $data = DB::table('member')->select(DB::raw('name,age'))->get();
        // 查询id为1的记录，返回name字段的值
        // $name = DB::table('member')->where('id', '4')->value('name');
        // // 输出结果
        // $data = DB::table('member')->orderBy('age', 'asc')->get();
        $data = DB::table('member')->limit(2)->offset(4)->get();
        dump($data);
    }
    public function user()
    {
        $data = Member::paginate(2);
        return view('user', compact('data'));
    }
    public function captcha()
    {
        return view('captcha');
    }
    public function checkCaptcha(Request $request)
    {
        $this->validate($request, [
            'captcha' => 'required|captcha'
        ], [
            'captcha.captcha' => '验证码有误'
        ]);
        // return '验证码正确';
        // return redirect()->route('home');

        return redirect('txt/avatar');
    }
    public function cache()
    {
        // Cache::put('name','张三');
        // Cache::put('name1',"李四",60);
        // dump($value);
        // Cache::add('age',60);
        // Cache::add('age',70);
        // if (Cache::has('age')) {
        //     dump('存在');
        // }else{
        //     dump('不存在');
        // }
        // $value=Cache::get('name');
        // dump($value);
        // Cache::pull('name');
        // Cache::forget('age');
        // Cache::flush();
        Cache::add('count', 0, 100);
        // Cache::increment('count');
        Cache::decrement('count');
        return '你是第' . Cache::get('count') . '位访客';
    }
    public function testArr()
    {
        // $array=Arr::add(['name'=>'Tom'],'age',18);
        // dump(Arr::get($array,'name'));
        // dump(Arr::get($array,'gender','male'));
        // dump(Arr::get($array,'name'));

        // $array=['Desk','Table','Chair'];
        // $sorted=Arr::sort($array);
        // dump($sorted);
        // $num=[100,300,200];
        // $numsorted=Arr::sort($num);
        // dump($numsorted);

        $array = [
            ['Roman', 'Taylor', 'Li'],
            ['PHP', 'React', 'JavaScript'],
            ['one' => 1, 'two' => 2, 'three' => 3],
        ];
        $sorted = Arr::sortRecursive($array);
        dump($sorted);
    }
    public function testStr()
    {
        dump(Str::camel('foot_bar'));
        dump(Str::kebab('footBar'));
        dump(Str::snake('footBar'));
        $matches = Str::is('foo*', 'foobar');
        $matchess = Str::is('foo*', 'barbar');
        dump($matches);
        dump($matchess);
    }
    public function testURL()
    {
        $url = action('TestController@testStr');
        // $url1=action('TestController@from',['id'=>1]);
        $url2 = route('home');
        $url3 = asset('img/photo');
        dump($url);
        // dump($url1);
        dump($url2);
        dump($url3);

        $path = app_path();
        dump($path);
        dump(base_path());
    }
    public function xmldate()
    {
        $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><booklist></booklist>');
        $book = $xml->addChild('book');
        $book->addChild('name', 'Laravel框架');
        $book->addChild('author', '黑马程序员');
        $book = $xml->addChild('book');
        $book->addChild('name', 'vue.js的程序开发');
        $book->addChild('author', '黑马程序员');
        $content = $xml->asXML();
        return response($content)->header('Content-Type', 'text/xml');
    }
    public function xml()
    {
        return view('xml');
    }
    public function jsondate()
    {
        $date = [['name' => '普京', 'age' => '50'], ['name' => '拜登', 'age' => '81']];
        return response()->json($date);
    }
    public function json()
    {
        return view('json');
    }
}
